use chrono::Datelike;

// 定义 ArrowDateExt trait
pub trait ArrowDateExt {
    fn safe_quarter(&self) -> u32;
}

// 为所有实现 Datelike 的类型实现 ArrowDateExt
impl<T: Datelike> ArrowDateExt for T {
    fn safe_quarter(&self) -> u32 {
        match self.month() {
            1..=3 => 1,
            4..=6 => 2,
            7..=9 => 3,
            10..=12 => 4,
            _ => 0, // 不可能的情况，但为了安全
        }
    }
}

pub trait QuarterExt {
    fn get_quarter(&self) -> u32;
}

impl<T: Datelike + ArrowDateExt> QuarterExt for T {
    fn get_quarter(&self) -> u32 {
        // 使用我们定义的 safe_quarter 方法
        self.safe_quarter()
    }
}